#include <UTFT.h>
#include <math.h>
extern uint8_t BigFont[];

UTFT myGLCD(ITDB32S,19,18,17,16);  
double pi = 3.14;
double R = 119.0;
void setup()
{
  randomSeed(analogRead(0));
  
  myGLCD.InitLCD();
  myGLCD.setFont(BigFont);
  
}
void loop()
{

  // Нужно ли чистить экран каждый цикл?
  myGLCD.clrScr();
  // Возможно определение размеров экрана стоит вынести в секцию Setup и использовать глобальные переменные?
  int Xsize = myGLCD.getDisplayXSize();
  int Ysize = myGLCD.getDisplayYSize();
  int Xmid = Xsize/2;
  int Ymid = Ysize/2;
  String xString = String(Xsize);
  String yString = String(Ysize);
  myGLCD.setColor(255, 0, 0);
  myGLCD.drawCircle( Xmid,  Ymid, 119);
  myGLCD.setColor(205, 133, 63);
    // Желательно ставить комментарии везде, где код не очевиден. Это не стоит много, зато экономит время в последующем. Например, хотелось бы сразу знать назначение последующих переменных
  int Einterval = 0;
  int Linterval = 0;
  int Lsize = 69; 
  int x0 = Xmid;
  int y0 = Ymid;
    // Эта операция выглядит бессмысленной, поскольку деление на ноль столь же результативно как и умножение на него. Во всяком случае это можно вынести в Setup, поскольку результат всегда будет одинаков
  double angle1 = (0/180.0)*pi;  
  // Аналогично, все переменные в правой части выражения выглядят неизменными, значит дают одинаковый результат?
  // Кроме того, комменты тут тоже не помешают
  double x1 = x0 + R * cos( angle1 );
  double y1 = y0 + R * sin( angle1 );
  myGLCD.print("0", x1+10, y1,0 );
  // Аналогично
  double angle2 = (90/180.0)*pi;
  double x2 = x0 + R * cos( angle2 );
  double y2 = y0 + R * sin( angle2 );
     
  myGLCD.setColor(255, 0, 0);
  myGLCD.setColor(132, 112, 255);
  myGLCD.print("90", x2+40, y2-20, 0);

  double pitchA = (10/180.0)*pi; //10
  double rollA = ((90-15)/180.0)*pi; //60
  double pitchL = 20.0;
  
  for (int j = 0; j < 60; j+=5)
   {
     rollA = ((90-j)/180.0)*pi;
     pitchL = 20.0+j;
     myGLCD.setColor(255,20,147);
     pitchArrow( pitchL,rollA,x0,  y0);
   
     double xR = x0 + R * cos(rollA);
     double yR = y0 + R * sin(rollA);
     myGLCD.drawLine(Xmid,Ymid,xR,yR); 
     delay(1000);     
 // Предлагаю вытирать линии непосредственно перед отрисовкой новых. Вряд ли это сильно повлияет на мелькания - между ними всего несколько операций, но попробовать можно. 
     myGLCD.setColor(0,0,0);
     myGLCD.drawLine(Xmid,Ymid,xR,yR);
     myGLCD.setColor(0,0,0);
     pitchArrow( pitchL,rollA,x0,  y0);
     
   }  
  
  delay (10000);
}
  void pitchArrow(double pitch, double roll, double x0, double y0)
  {
  double pitchAone = (pi*2.0) - ( (asin((sqrt(pow(R, 2.0) - pow(pitch, 2.0)))/R)) + (pi/2.0) - (roll - (pi/2.0)) ); 
   
  double xPaOne = x0 + R * cos(pitchAone);
  double yPaOne = y0 + R * sin(pitchAone);

  double pitchAtwo = (pi*2.0) + ( (asin((sqrt(pow(R, 2.0) - pow(pitch, 2.0)))/R))  - ((pi/2.0) -(roll - (pi/2.0))) );

  double xPaTwo = x0 + R * cos(pitchAtwo);
  double yPaTwo = y0 + R * sin(pitchAtwo);
 
 
  myGLCD.drawLine(xPaOne,yPaOne,xPaTwo,yPaTwo);
  }
 
